#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int nums[n + 1];
    int help[n + 1] = {0};
    for (int i = 1; i <= n; i++)
    {
        cin >> nums[i];
        help[i] = help[i - 1] ^ nums[i];
    }
    int k;
    cin >> k;
    int res = 0;
    for (int i = 1; i <= n; i++)
    {
        for (int j = i; j <= n; j++)
        {
            //记得加括号， 按位异或 运算级低
            if ((help[j] ^ help[i - 1]) == k){
                res++;
            }
        }
    }
    cout << res;
    return 0;
}

/*
mokit
题目描述
小可在五年级暑假开始学习编程，编程语言中有一种“按位异或(xor)”的运算引 起了他的莫大兴趣。
于是，他思考这样的一个问题：给一个长度为 n 的整数序列 A和整数k，
如何计算出满足下列两个条件的整数对 (l, r) 的数量。

1、1≤l≤r≤n；

2、Al xor A(l+1) xor … xor Ar =k。

小可可虽然提出了问题，但他自己不会解决，只好又要麻烦你解决啦。

说明：xor 就是按位异或（C 或 C++语言中“按位异或”运算符为^）

输入说明
输入有三行：

第一行一个正整数 n，表示整数序列 A 的元素个数。

第二行有 n 个整数，第 i 个整数 Ai 表示整数序列 A 的第 i 个元素的值。

第三行是一个正整数k,

对于全部测试样例： 1≤ n ≤ 200000，0≤ Ai ≤ 2^20。

输出说明
输出一行，包括一个正整数，表示满足条件的整数对 (l, r) 的数量。

输入样例复制
4

2 5 3 3

7

输出样例复制
2
*/